package work.learn.interfaces;

import java.util.HashMap;
import java.util.Map;

/*
常用的 Map 实现类有 HashMap、LinkedHashMap 和 TreeMap：
HashMap：基于哈希表实现。它通过计算键的 hashCode() 来确定存储位置，对于不同的键，可能会计算出相同的哈希值（哈希冲突），在 Java 8 之前，通过链表来解决哈希冲突，链表的每个节点保存一个键值对；Java 8 引入了红黑树，当链表长度超过阈值时（默认为 8），会将链表转换为红黑树以提高查找效率。
LinkedHashMap：继承自 HashMap，内部维护了一个双向链表来记录键值对的插入顺序（或访问顺序，如果开启访问顺序功能）。这样在遍历 LinkedHashMap 时，可以按照插入顺序或者访问顺序依次遍历。
TreeMap：基于红黑树实现，键值对按照键的自然顺序（实现 Comparable 接口）或者自定义顺序（传入 Comparator）进行排序。它适用于需要按键排序的场景，插入、删除和查找操作的时间复杂度为 O (log n)。
* */
public class MapExample {
    public static void main(String[] args) {
        // 创建一个 Map
        Map<String, Integer> map = new HashMap<>();

        // 添加键值对
        map.put("Apple", 100);
        map.put("Banana", 200);

        // 获取值
        Integer appleCount = map.get("Apple");
        System.out.println("Count of apples: " + appleCount);

        // 遍历 Map
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key + ": " + value);
        }

        // 修改值
        map.put("Apple", 150);
        System.out.println("Map after update: " + map);

        // 删除键值对
        map.remove("Banana");
        System.out.println("Map after deletion: " + map);
    }
}